//package com.epoint.modbus;
//
//import com.serotonin.modbus4j.ModbusFactory;
//import com.serotonin.modbus4j.ip.tcp.TcpMaster;
//import com.serotonin.modbus4j.msg.*;
//import com.serotonin.modbus4j.exception.ModbusTransportException;
//import com.serotonin.modbus4j.locator.BaseLocator;
//import com.serotonin.modbus4j.code.DataType;
//
//public class Modbus4JExample {
//    public static void main(String[] args) {
//        // Modbus 服务器地址和端口
//        String host = "192.168.1.100"; // 修改为你的 Modbus 设备 IP
//        int port = 502; // Modbus-TCP 端口（默认 502）
//
//        // 创建 Modbus-TCP 客户端
//        ModbusFactory modbusFactory = new ModbusFactory();
//        TcpMaster master = new TcpMaster(host, port, true); // true 表示保持长连接
//
//        try {
//            // 启动 Modbus Master
//            master.init();
//
//            // 读取操作
//            readCoilStatus(master, 1, 0, 10); // 读取从站 1 的 10 个线圈状态
//            readDiscreteInputs(master, 1, 0, 10); // 读取 10 个离散输入
//            readHoldingRegisters(master, 1, 0, 2); // 读取 2 个保持寄存器
//            readInputRegisters(master, 1, 0, 2); // 读取 2 个输入寄存器
//
//            // 写入操作
//            writeSingleCoil(master, 1, 5, true); // 设置线圈 5 为 ON
//            writeSingleHoldingRegister(master, 1, 10, 1234); // 设置保持寄存器 10 的值
//            writeMultipleCoils(master, 1, 8, new boolean[]{true, false, true, false});
//            writeMultipleHoldingRegisters(master, 1, 12, new short[]{100, 200, 300});
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            // 关闭连接
//            master.destroy();
//        }
//    }
//
//    /**
//     * 读取线圈状态（0x01）
//     */
//    public static void readCoilStatus(TcpMaster master, int slaveId, int startOffset, int count) throws ModbusTransportException {
//        ReadCoilsRequest request = new ReadCoilsRequest(slaveId, startOffset, count);
//        ReadCoilsResponse response = (ReadCoilsResponse) master.send(request);
//        if (response.isException()) {
//            System.out.println("读取线圈失败: " + response.getExceptionMessage());
//        } else {
//            System.out.println("线圈状态: " + java.util.Arrays.toString(response.getBooleanData()));
//        }
//    }
//
//    /**
//     * 读取离散输入（0x02）
//     */
//    public static void readDiscreteInputs(TcpMaster master, int slaveId, int startOffset, int count) throws ModbusTransportException {
//        ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, startOffset, count);
//        ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) master.send(request);
//        if (response.isException()) {
//            System.out.println("读取离散输入失败: " + response.getExceptionMessage());
//        } else {
//            System.out.println("离散输入状态: " + java.util.Arrays.toString(response.getBooleanData()));
//        }
//    }
//
//    /**
//     * 读取保持寄存器（0x03）
//     */
//    public static void readHoldingRegisters(TcpMaster master, int slaveId, int startOffset, int count) throws ModbusTransportException {
//        ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(slaveId, startOffset, count);
//        ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master.send(request);
//        if (response.isException()) {
//            System.out.println("读取保持寄存器失败: " + response.getExceptionMessage());
//        } else {
//            System.out.println("保持寄存器值: " + java.util.Arrays.toString(response.getShortData()));
//        }
//    }
//
//    /**
//     * 读取输入寄存器（0x04）
//     */
//    public static void readInputRegisters(TcpMaster master, int slaveId, int startOffset, int count) throws ModbusTransportException {
//        ReadInputRegistersRequest request = new ReadInputRegistersRequest(slaveId, startOffset, count);
//        ReadInputRegistersResponse response = (ReadInputRegistersResponse) master.send(request);
//        if (response.isException()) {
//            System.out.println("读取输入寄存器失败: " + response.getExceptionMessage());
//        } else {
//            System.out.println("输入寄存器值: " + java.util.Arrays.toString(response.getShortData()));
//        }
//    }
//
//    /**
//     * 写入单个线圈（0x05）
//     */
//    public static void writeSingleCoil(TcpMaster master, int slaveId, int offset, boolean value) throws ModbusTransportException {
//        WriteCoilRequest request = new WriteCoilRequest(slaveId, offset, value);
//        master.send(request);
//        System.out.println("写入单个线圈 " + offset + " : " + value);
//    }
//
//    /**
//     * 写入单个保持寄存器（0x06）
//     */
//    public static void writeSingleHoldingRegister(TcpMaster master, int slaveId, int offset, int value) throws ModbusTransportException {
//        WriteRegisterRequest request = new WriteRegisterRequest(slaveId, offset, value);
//        master.send(request);
//        System.out.println("写入单个保持寄存器 " + offset + " : " + value);
//    }
//
//    /**
//     * 写入多个线圈（0x0F）
//     */
//    public static void writeMultipleCoils(TcpMaster master, int slaveId, int startOffset, boolean[] values) throws ModbusTransportException {
//        WriteCoilsRequest request = new WriteCoilsRequest(slaveId, startOffset, values);
//        master.send(request);
//        System.out.println("写入多个线圈 " + startOffset + " : " + java.util.Arrays.toString(values));
//    }
//
//    /**
//     * 写入多个保持寄存器（0x10）
//     */
//    public static void writeMultipleHoldingRegisters(TcpMaster master, int slaveId, int startOffset, short[] values) throws ModbusTransportException {
//        WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startOffset, values);
//        master.send(request);
//        System.out.println("写入多个保持寄存器 " + startOffset + " : " + java.util.Arrays.toString(values));
//    }
//}
